Androidアプリを実機でデバッグできるようにしてみた
こんにちは、CX事業本部 Delivery部の若槻です。
今回は、Androidアプリを実機でデバッグできるようにしてみました。
デバッグ方法の確認
Androidアプリを公開するフォーマットとして「AAB(Android App Bundle)」と「APK」があります。2018年にローンチされたAABは公開のみを目的としており、APKはインストールかつ実行が可能なフォーマットとなっているとのこと。
実機でデバッグしながら開発をしたい場合はAPKを引き続き使えば良さそうです。
やってみた
Android Studioで作成した次のアプリを、APKを利用して実機で動かしてみます。
実機となるAndroid端末は、OSバージョンは13で、予めデバッグモードを有効化済みです。
APKの生成
まずはアプリのソースコードからAPKファイルを生成します。
Android Studioで[Build > Generate Signed Bundles / APK]を選択。
[APK]を選択して[Next]。
Keystoreファイルが未作成なので、[Key store path]で[Create new]をクリック。
Keystore systemを利用することにより暗号化キーをAndroidアプリ内の安全な領域に保管することができるようになります。詳しくは下記を御覧ください。
ファイル名を指定して任意の場所に保存します。次回以降はこのKeystoreファイルを再利用できます。
[Next]をクリック。
いずれかのBuild Variantsを選択して[Create]。
app/release/app-release.apk
にapkファイルが作成されました。
実機でアプリを動作させる
Android Debug Bridge(adb)を使用すると、Android Studioを動作させているPCから実機にapkによるアプリインストールをコマンドで行うことができます。
そこでadb installをしようとしたらcommand not found
エラーとなりました。
$ adb install ./AndroidStudioProjects/MyApplication/app/release/app-release.apk zsh: command not found: adb
PATHを通す必要があったので通します。
export PATH=$PATH:$HOME/Library/Android/sdk/platform-tools
再度adb installをしようとしたら次はmore than one device/emulator
エラーとなりました。
$ adb install ./AndroidStudioProjects/MyApplication/app/release/app-release.apk adb: more than one device/emulator
これは、Android Studioでのエミュレーターの起動と、実機の接続を同時にしているため、adbがどちらにインストールすればよいか判断できないことが原因でした。
デバイス一覧を取得して実機のIDを確認します。
$ adb devices -l List of devices attached R5CR31RFKEA device usb:17825792X product:SC-52B model:SC_52B device:SC-52B transport_id:3 emulator-5554 device product:sdk_gphone64_arm64 model:sdk_gphone64_arm64 device:emu64a transport_id:1
-s
オプションで実機のIDを指定してインストール実行。
adb -s R5CR31RFKEA install ./AndroidStudioProjects/MyApplication/app/release/app-release.apk
するとインストールできました。
アプリの起動もできました。
adbにより実機にアプリがインストールされたら、Android Studioでのアプリの実行および停止操作は、エミュレーターではなく実機に対して行われるようになります。
シミュレーターコンソールをよく見るとエミュレータ端末として実機(Samsung)が選択されています。
ソースコードの変更を実機上のアプリに反映させる
コードの変更を実機上のアプリに再インストールせずに反映させることもできます。
ソースコードを変更したら、Android Studioで[Apply Change and Restart Activity]をクリックします。
するとアプリ側にソースコードの変更が反映されました。
実機からアプリを削除する
実機からアプリを削除したく、adb uninstallコマンドを実行してみると、エラーと成りました。
$ adb -s R5CR31RFKEA uninstall ./AndroidStudioProjects/MyApplication/app/release/app-release.apk Failure [DELETE_FAILED_INTERNAL_ERROR]
何かがよろしく無いようですが、原因が分からなかったので別の方法を取ります。
まずUSBケーブルの接続を物理的に外します。
するとエミュレーターの端末一覧から実機が消えました。
その後、実機に残っているアプリを手動でアンインストールします。
これで実機からアプリを削除できました。
その他の実機デバッグ方法
MacBookから実機にAPKファイルを転送して、実機側でインストールする方法もあるようです。
MacとAndroid間なら、Android File Transferを使うと良さそうです。
参考
- 実機でデバッグしながらAndroidアプリ開発。
- adb: command not found になったら - パクチーとみたの備忘録
- android - How to use ADB Shell when Multiple Devices are connected? Fails with "error: more than one device and emulator" - Stack Overflow
以上